package br.com.vendas;

import java.io.IOException;
import java.math.BigDecimal;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.swing.JOptionPane;
import javax.swing.text.DefaultFormatter;
import javax.swing.text.DefaultFormatterFactory;
import javax.swing.text.NumberFormatter;

import br.com.constant.Action;
import model.ConnectionFabric;
import model.ItemProduto;
import model.Produto;


/**
 * Servlet implementation class VendasAction
 */
@WebServlet("/VendasAction")
public class VendasAction extends HttpServlet {
	
	private static final long serialVersionUID = 1L;
	private List<ItemProduto> listaProdutos;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public VendasAction() {
        super();
        
        

     }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
	   
		
        
		String action=(String)request.getParameter("action");
		
		
       
		if(action  == null){
			listaProdutos = (List<ItemProduto>)request.getSession().getAttribute("listaProdutos");
            
			if(listaProdutos==null)
			listaProdutos = new ArrayList<ItemProduto>();
			//listaProdutos = (List<ItemProduto>)request.getSession().getAttribute("listaProdutos"); 
			String sql;
			String dado = request.getParameter("codigo");
		    int codigo = 0;
		    if(dado ==""){
	        JOptionPane.showMessageDialog(null, "Digite Um codigo valido!");
		    }else
			codigo = Integer.parseInt(dado);
             
        try{
		
        sql = "select nome, valor from produtos where cod_produto = ?";
		Connection con = ConnectionFabric.getConnection();	    	
	    PreparedStatement ps = con.prepareStatement(sql);
	    ps.setInt(1,codigo);
	    ResultSet rs = ps.executeQuery();	
	    
	    System.out.println("tamanho: "+ listaProdutos.size());
	          int count = 0;
	    
	          while(rs.next()){
	    	  
              for(ItemProduto list : listaProdutos){
            	  
            	if(list.getProduto().getId() == codigo){
            		
            	list.setQuantidade(list.getQuantidade() +1);
            	count += 1;
            	break;	
            	}  
            	  
              }
              if(count == 0)
              {
	    	  Double Valor = rs.getDouble("valor");
	    	  
	    	  
	 
	    	  System.out.println(Valor);
 
	          listaProdutos.add(new ItemProduto(new Produto(codigo,rs.getString("Nome"),Valor), 1, 0));

 }
	    
}      
  	    System.out.println("Lista: " + listaProdutos.size()); 	   
	   // request.getSession().setAttribute("listaProdutos", listaProdutos);
        }catch(Exception  ex){
	    	
	    	ex.printStackTrace();
	    	
	    }
        
        }else{
       // String action = (String)request.getParameter("action"); 

        
		if(action != null){
		     listaProdutos = (List<ItemProduto>)request.getSession().getAttribute("listaProdutos");

			
		    int linha = Integer.parseInt((String)request.getParameter("linha"));

			//aki atualizo a quantidade de produtos de cada item produto 	
			if(action.equals(Action.QTD.toString())){
				atualizaQTDItemProduto((String)request.getParameter("value"), linha);	
			}else if(action.equals(Action.RMV.toString())){
				listaProdutos.remove(linha);				
			}else if(action.equals(Action.UPVALFIN.toString())){
				String valorFinal = (String)request.getParameter("value");
				listaProdutos.get(linha).setValorFinal(new Double(valorFinal));
			}
        
           // request.getSession().setAttribute("total", getValorTotalItens(listaProdutos));
           //request.getSession().setAttribute("listaProdutos", listaProdutos);   
		}
        }
		
		  request.getSession().setAttribute("total", getValorTotalItens(listaProdutos));
	      request.getSession().setAttribute("listaProdutos", listaProdutos);   
		  
		response.sendRedirect("vendas.jsp");
		
	}
	
	/**
	 * Retorna o valor total do total de itens
	 * @return
	 */
	private Double getValorTotalItens(List<ItemProduto> listaProdutos){
		double total = 0;
		if(!listaProdutos.isEmpty()){
			for (ItemProduto itens : listaProdutos) {
				total += itens.getValorFinal(); 
			}
		}
	
		return total;
	}
	
	/**
	 * Metodo resposavel por atualizar a quantidade de cada item de produto 
	 * @param tipo
	 * @param linha
	 */
	private void atualizaQTDItemProduto(String tipo, int linha){
		if(tipo.equals("MIN")){
			if(listaProdutos.get(linha).getQuantidade() - 1 <= 0){
				listaProdutos.remove(linha);	
			}else{
				listaProdutos.get(linha).setQuantidade(listaProdutos.get(linha).getQuantidade() - 1);
			}
		}else{
			listaProdutos.get(linha).setQuantidade(listaProdutos.get(linha).getQuantidade() + 1);
		}
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
	}

}
